home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 101-125 / scopedisk109 / ms-dos / src / device.h < prev    next >
C/C++ Source or Header  |  1995-03-19  |  6KB  |  195 lines

  1. /*-
  2.  *  $Id: device.h,v 1.2 90/01/27 20:39:10 Rhialto Exp $
  3.  *
  4.  *  This code is (C) Copyright 1989 by Olaf Seibert. All rights reserved. May
  5.  *  not be used or copied without a licence.
  6. -*/
  7.  
  8. #define MD_NUMUNITS    4
  9.  
  10. #define VERSION        34L
  11. #define REVISION       5
  12.  
  13. #asm
  14. VERSION     equ        34
  15. RTPRI      equ         0
  16. #endasm
  17.  
  18. struct MessyDevice {
  19.     struct Device   md_Dev;
  20.     struct MessyUnit *md_Unit[MD_NUMUNITS];
  21.     long           md_Seglist;
  22.     struct SignalSemaphore md_HardwareUse;
  23.     byte          *md_Rawbuffer;
  24.     byte           md_MfmDecode[128];
  25. };
  26.  
  27. #define dev_Node       md_Dev.dd_Library.lib_Node
  28. #define dev_Flags      md_Dev.dd_Library.lib_Flags
  29. #define dev_NegSize    md_Dev.dd_Library.lib_NegSize
  30. #define dev_PosSize    md_Dev.dd_Library.lib_PosSize
  31. #define dev_Version    md_Dev.dd_Library.lib_Version
  32. #define dev_Revision   md_Dev.dd_Library.lib_Revision
  33. #define dev_IdString   md_Dev.dd_Library.lib_IdString
  34. #define dev_OpenCnt    md_Dev.dd_Library.lib_OpenCnt
  35.  
  36. struct MessyUnit {
  37.     struct MsgPort  mu_Port;
  38.     short          mu_OpenCnt;
  39.     short          mu_UnitNr;
  40.     byte           mu_Flags;
  41.     char           mu_InitSectorStatus;
  42.     ulong          mu_ChangeNum;
  43.     char           mu_DiskState;
  44.     byte           mu_DmaSignal;
  45.     short          mu_SectorsPerTrack; /* The nominal #sectors/track */
  46.     short          mu_CurrentSectors;  /* The current #sectors on this track */
  47.     short          mu_CurrentTrack;    /* Position of the head, and */
  48.     short          mu_CurrentSide;     /* what's in the track buffer */
  49.     short          mu_TrackChanged;
  50.     struct DiskResourceUnit mu_DRUnit;
  51.     struct MsgPort  mu_DiskReplyPort;
  52.     struct IOExtTD *mu_DiskIOReq;
  53.     struct IOStdReq *mu_DiskChangeReq;
  54.     struct Interrupt mu_DiskChangeInt;
  55.     struct MinList  mu_ChangeIntList;
  56.     short          mu_NumCyls;
  57.     byte           mu_TrackBuffer[MS_SPT_MAX * MS_BPS];   /* Must be word aligned */
  58.     word           mu_CrcBuffer[MS_SPT_MAX];
  59.     char           mu_SectorStatus[MS_SPT_MAX];
  60. };
  61.  
  62. #define     TDERR_NoError   0
  63. #define     CRC_UNCHECKED   -1
  64. #define     CRC_CHANGED     -2
  65.  
  66. #define UNITB_ACTIVE   0
  67. #define UNITF_STOPPED  (1<<2)
  68. #define UNITF_WAKETASK (1<<3)
  69.  
  70. #define STATEF_UNKNOWN (1<<0)
  71. #define STATEF_PRESENT (1<<1)
  72. #define STATEF_WRITABLE (1<<2)
  73.  
  74. /* Some constants related to #defines */
  75. #asm
  76. MS_BPS             equ 512
  77. MS_BPScode         equ 2                   ; 2log(MSBPS/128)
  78. LOG2_MS_BPS        equ 9
  79. MS_SPT             equ 9
  80. MS_SPT_MAX         equ 10
  81. #endasm
  82.  
  83. typedef struct MessyDevice DEV;
  84. typedef struct MessyUnit   UNIT;
  85.  
  86.  
  87. #define TASKPRI     5L
  88. #define TASKSTACK   2048L
  89.  
  90. /*
  91.  *  Which of the device commands are real, and which are
  92.  *  routed to trackdisk.device.
  93.  */
  94.  
  95. /*  #define CMD_Invalid     /**/
  96. /*  #define CMD_Reset      /**/
  97. /*  #define CMD_Read       /**/
  98. /*  #define CMD_Write      /**/
  99. /*  #define CMD_Update     /**/
  100. /*  #define CMD_Clear      /**/
  101. /*  #define CMD_Stop       /**/
  102. /*  #define CMD_Start      /**/
  103. /*  #define CMD_Flush      /**/
  104.     #define TD_Motor       TrackdiskGateway
  105. /*  #define TD_Seek        /**/
  106. /*  #define TD_Format      /**/
  107.     #define TD_Remove      TrackdiskGateway
  108. /*  #define TD_Changenum    /**/
  109.     #define TD_Changestate  TrackdiskGateway
  110.     #define TD_Protstatus   TrackdiskGateway
  111.     #define TD_Rawread     TrackdiskGateway
  112.     #define TD_Rawwrite     TrackdiskGateway
  113.     #define TD_Getdrivetype TrackdiskGateway
  114.     #define TD_Getnumtracks TrackdiskGateway
  115. /*  #define TD_Addchangeint /**/
  116. /*  #define TD_Remchangeint /**/
  117.  
  118. #define STRIP(cmd)  ((unsigned char)cmd)
  119. #define IMMEDIATE   ((1<<CMD_INVALID)|(1<<CMD_RESET)|\
  120.                     (1<<CMD_STOP)|(1<<CMD_START)|(1<<CMD_FLUSH)|\
  121.                     (1L<<TD_ADDCHANGEINT))
  122. #define PerformIO(ioreq, unit) \
  123.                    (funcTable[STRIP(ioreq->io_Command)])(ioreq, unit)
  124.  
  125. extern DEV *MakeLibrary();
  126. extern struct Task *FindTask();
  127. extern struct Task *CreateTask();
  128.  
  129. /*
  130.  *  Forward declarations:
  131.  */
  132.  
  133. extern char EndCode;
  134. extern void Init(), _DevOpen(), _DevClose(), _DevExpunge(), _LibNull();
  135. extern void _DevBeginIO(), _DevAbortIO();
  136.  
  137. extern char DevName[], idString[];
  138.  
  139. extern DEV *CInit();
  140. extern void DevOpen();
  141. extern long DevClose(), DevExpunge();
  142. extern void DevBeginIO(), TermIO();
  143. extern long DevAbortIO();
  144.  
  145. extern void WakePort();
  146. extern void UnitTask();
  147.  
  148. extern int DevInit();
  149. extern UNIT *UnitInit();
  150. extern void DiskChangeHandler();
  151.  
  152. extern void TrackdiskGateway();
  153. extern void CMD_Invalid();
  154. extern void CMD_Reset();
  155. extern void CMD_Read();
  156. extern void CMD_Write();
  157. extern void CMD_Update();
  158. extern void CMD_Clear();
  159. extern void CMD_Stop();
  160. extern void CMD_Start();
  161. extern void CMD_Flush();
  162. extern void TD_Seek();
  163. extern void TD_Format();
  164. extern void TD_Changenum();
  165. extern void TD_Addchangeint();
  166. extern void TD_Remchangeint();
  167.  
  168. extern struct DiskResource *OpenResource();
  169. extern struct MsgPort *DeviceProc();
  170. extern struct MsgPort *CreatePort();
  171. extern struct IOExtTD *CreateExtIO();
  172. extern void    *GetUnit(), *GetMsg();
  173. extern long    Wait();
  174. extern void    *AllocMem(), FreeMem();
  175. extern byte    *index(), *rindex();
  176.  
  177. extern int     ReadTrack();
  178. extern void    InitDecoding();
  179. extern int     TDSeek();
  180. extern int     TDMotorOn();
  181. extern int     TDMotorOff();
  182. extern int     TDGetNumCyls();
  183. extern void    *GetDrive();
  184. extern void    FreeDrive();
  185. extern int     DevOpenUp();
  186. extern int     DevCloseDown();
  187. extern int     GetTrack();
  188. extern int     CheckRequest();
  189.  
  190. #ifndef READONLY
  191. extern int     InitWrite();
  192. extern void    FreeBuffer();
  193. extern void    EncodeTrack();
  194. #endif
  195.